﻿#ifndef MAIN_WINDOWN
#define MAIN_WINDOWN
#include <memory>
#include "ui_main_window.h"
#include "inference.h"

class DetectThreadBase;
class MainWindow:public QMainWindow{
Q_OBJECT

public:
	Ui_MainWindow ui;					// UI
	std::unique_ptr<QMovie> movie;		// 加载动画
	bool is_label;						// 是否标注图片

public:
	std::unique_ptr<Inference> inference;// 推理模型
	std::unique_ptr<QThread> global_threading;	// 全局线程
	int current_weight_index{ -1 };		// 当前模型索引

	void closeEvent(QCloseEvent* event);// 窗口关闭事件
	void append_log(QString text);		// 日志
	void show_img(QString& path);		// 显示图片
	void show_img(QPixmap& pixmap);		// 显示图片
	void show_img(QPixmap&& pixmap);	// 显示图片, 移动语义
	void connect_slots();				// 连接槽函数


signals:
	void start_loading_movie_signal();  // 开始加载动画
	void stop_loading_movie_signal();   // 停止加载动画

// SLOT
private slots:
	// 读取本地文件
	
	// 三个按钮
	void cammera_slot();
	void image_slot();
	void video_slot();


	// 两个spinbox
	void iou_spinbox_slot(double value);
	void conf_spinbox_slot(double value);

	// 两个 slider
	void iou_slider_slot(int value);
	void conf_slider_slot(int value);

	// 两个 reset
	void reset_iou_slot();
	void reset_conf_slot();

	// 下拉列表
	void model_select_slot(int index);

	// 导入模型按钮
	void import_model_button_slot();

	// 加载动画
	void start_loading_movie_slot();
	void stop_loading_movie_slot();

	// 是否标注图片
	void islabel_slot(bool value);
	
public:
	void refresh_model_list();				// 刷新模型列表
	void disable_all_button();				// 禁用所有按钮	
	void enable_all_button();				// 启用所有按钮	
	bool check_model();						// 检查模型
	void load_model_from_model_list();		// 从模型列表加载模型

MainWindow();
~MainWindow();

};


#endif // !MAIN_WINDOWN
